55 p進小数と数値計算
https://web.archive.org/web/http://home.p07.itscom.net/strmdrf/basic55.htm
小数点表示などの記述を厳密に形式化する
p進有限小数の集合$ \Bbb Q_p
$ \Bbb Q_p:\N\ni p\mapsto\{r\in\Bbb Q|\exist n\in\N\exist q\in\Z.r=qp^{-n}\}
p進数にて有限桁の小数で表せる有理数全体のこと
例えば$ 23.456なら、$ 23456=\frac{23456}{1000}=23456\cdot{10}^{-3}\in\Bbb Q_{10}となる
$ \frac23は$ \frac23=2\cdot 3^{-1}\in\Bbb Q_3だが、10進数だと循環小数になるため$ \frac23=0.\dot 6\notin\Bbb Q_{10}である
$ 0.5=\frac12=1\cdot 2^{-1}=5\cdot{10}^{-1}\in\Bbb Q_{10}\cap\Bbb Q_2だが$ 0.2=\frac15\notin\Bbb Q_2である
浮動小数点を始めとする計算機での小数表現は全て2進数なため、$ 0.2を正確に表すことができない
p進小数の集合$ \R_p
$ \R_p:\N\ni p\mapsto\{x\in\R|\forall r\in\Bbb Q_p.x\le r\lor r\le x\}
古典論理なら$ \R_p=\R
性質
明らかに、有理数と無理数は p進小数であり、従って代数的数又は超越数であるような実数は p進小数です。
つまり、直観主義論理でも$ \R_p=\Rってこと?takker.icon
わからない。誰か教えてください!
$ \Bbb Q_p\subseteq\R_p
$ \Bbb Qが全順序集合であることから導出できる
定理
$ \forall m\in\Z\forall a_k:\Z_{\le m}\to[0,p\lbrack\cap\N について$ \sum_{k\le m}a_kp^kは$ \R_pの元のどれかに必ず収束する
意味
$ a_kはある数をp進数で表示したときの$ k桁目の値を示す
例えば$ 23.456なら、$ p=10,m=1,a_1=2,a_0=3,a_{-1}=4,\cdotsとなる
もし$ 23.456のように有限小数(=$ p=10のp進有限小数)に収まるなら、$ 23.456\in\Bbb Q_{10}\subseteq\R_{10}であり自明
この定理は$ \pi=3.141596\cdotsのような無限小数も$ \R_pに含まれることを指している
$ a_kp^k\ge0なので、ここでは正の実数のみを取り扱おうとしている
証明
$ \forall n\in\Z_{\ge0}にて
$ \sum_{m-n\le k\le m}a_kp^k=p^{m-n}\sum_{m-n\le k\le m}a_kp^{k-m+n}
$ = p^{m-n}\sum_{0\le k\le n}a_{k+m-n}p^k
$ =l_{n-m}p^{m-n}
$ l_i:=\sum_{0\le k\le i+m}a_{k-i}p^k
$ \in\Z
$ \because \forall k\ge0.a_{k-i}p^k\in\Z
$ \forall n\in\Z_{\ge0}\forall j<m-n.にて、
$ l_{n-m}p^{m-n}=\sum_{m-n\le k\le m}a_kp^k
$ \le\sum_{j\le k<m-n}a_kp^k+\sum_{m-n\le k\le m}a_kp^k
$ \because0\le\sum_{j\le k<m-n}a_kp^k
$ =\sum_{j\le k\le m}a_kp^k
$ =\sum_{j\le k<m-n}a_kp^k+l_{n-m}p^{m-n}
$ \le(p-1)\sum_{j\le k<m-n}p^k+l_{n-m}p^{m-n}
$ = (p-1)\sum_{j\le k<m-n}⊿\frac{p^k}{p-1}+l_{n-m}p^{m-n}
ここで$ ⊿f(x):=f(x+1)-f(x)とした
$ = (p-1)\left(\frac{p^{m-n}}{p-1}-\frac{p^j}{p-1}\right)+l_{n-m}p^{m-n}
$ =p^{m-n}-p^j+l_{n-m}p^{m-n}
$ \implies\forall n\in\N_{\ge0}\forall j<m-n.l_{n-m}p^{m-n}\le\sum_{j\le k\le m}a_kp^k\le(l_{n-m}+1)p^{m-n}-p^j
$ \implies\forall n\in\Z_{\ge0}.l_{n-m}p^{m-n}\le\sum_{k\le m}a_kp^k\le(l_{n-m}+1)p^{m-n}
こう展開して良かったんだっけ……?takker.icon
仮に$ f(j)\le g(j)\to(l_{n-m}+1)p^{m-n}だったとしても、$ fが収束するとは限らないのでは?
$ (l_{n-m}+1)p^{m-n}以下で振動をしていたとしても式を満たす
もちろん、先に$ fの収束性を証明できていれば問題ない
$ \implies\forall j\in\N_{\ge-m}.l_jp^{-j}\le\sum_{k\le m}a_kp^k\le(l_j+1)p^{-j}
$ n=m+jを代入した
ここからどうするか詰まったtakker.icon
$ m\ge -1なら、$ \forall j\in\Nで成立するため、$ \forall r=q p^{-i}\in\Bbb Q_pについて$ j=iを代入し$ \forall s\in\Bbb Q.s\le l_i\lor l_i+1\le sと合わせれば$ \sum_{k\le m}a_kp^k\in\R_pが言える
$ m\le -2のときが厄介
$ r=qp^{m+1}
$ m=-2のとき$ j\ge2
$ j=1を入れることができない
つまり、$ r\in\Bbb Q_pが$ i<-mとなる$ iで$ r=qp^{-i}と表されていた場合、$ j=iとできない
$ j\ge-m>i>0のとき$ j=iとできないということ
$ j>i>0のときの比較手段があればいい
$ m<-i<0だから
$ p^m<p^{-i}=p^mp^{-i-m}
$ l_iの性質
$ l_{-m}=\sum_{0\le k\le-m+m}a_{k+m}p^k=a_mp^0=a_m<p
$ j=-mで評価できないか?
$ a_m+1\le qならいける
$ l_{-m}p^{m}\le\sum_{k\le m}a_kp^k\le(l_{-m}+1)p^{m}
$ \iff a_mp^m\le\sum_{k\le m}a_kp^k\le(a_m+1)p^{m}
$ <(a_m+1)p^{-i}
$ \because -j\le m<-i<0の場合を考えている
$ \le qp^{-i}
$ =r
$ q\le0のときも簡単
$ qp^{-i}\le0<a_mp^mだから
$ 1\le q\le a_mの場合は?
$ r=qp^{-i}\le a_mp^{-i}<p^{1-i}
$ q\le a_m\land(l_j+1)p^{-j}\le qp^{-i}となる$ jでもいい
$ \frac{l_j+1}{p^{j-i}}\le qとなれば……
$ l_jの収束条件を調べる
$ l_{n-m}p^{m-n}=\sum_{m-n\le k\le m}a_kp^kより
$ \forall j\in\Z.
$ l_jp^{-j}=\sum_{-j\le k\le m}a_kp^k
$ \le(p-1)\sum_{-j\le k\le m}⊿\frac{p^k}{p-1}
$ =(p-1)\left(\frac{p^{m+1}}{p-1}-\frac{p^{-j}}{p-1}\right)
$ =p^{m+1}-p^{-j}
$ \implies l_j\le p^{m+j+1}-1
よって、
$ \frac{l_j+1}{p^{j-i}}\le\frac{p^{m+j+1}}{p^{j-i}}=p^{m+i+1}
はーん。つまり
$ \forall j\in\Z.(l_j+1)p^{-j}\le p^{m+1}
だったのか。
最初にもどる
$ \implies\forall j\in\N_{\ge-m}.l_jp^{-j}\le\sum_{k\le m}a_kp^k\le(l_j+1)p^{-j}
$ \implies\forall j\in\N_{\ge-m}.l_jp^{-j}\le\sum_{k\le m}a_kp^k\le(l_j+1)p^{-j}\le p^{m+1}
$ i\ge-mのとき
$ \implies l_ip^{-i}\le\sum_{k\le m}a_kp^k\le(l_i+1)p^{-i}\le p^{m+1}
$ jに$ iを代入した
これと$ q\le l_i\lor l_i+1\le qより$ \sum_{k\le m}a_kp^k\in\R_pを示せる
$ q\le 0のとき
常に$ r\le0\le l_jp^{-j}なので$ \sum_{k\le m}a_kp^k\in\R_pとなる
一般に
$ \implies l_{-m}p^m\le\sum_{k\le m}a_kp^k\le(l_{-m}+1)p^m\le p^{m+1}
$ \implies a_mp^m\le\sum_{k\le m}a_kp^k\le(a_m+1)p^m\le p^{m+1}
ここから$ a_m+1\le pがわかる
$ 0\le a_k<pだから自明か……
$ 1\le q\land i<-mのとき
$ p^{m+1}\le p^{-i}
$ \because i<-m\iff m<-i\iff m+1\le-i
$ \le qp^{-i}
$ \because1\le q
$ =r
$ \therefore\sum_{k\le m}a_kp^k\in\R_pとなる
以上より、全ての条件にて$ \sum_{k\le m}a_kp^k\in\R_pを示せた
めちゃくちゃ時間がかかってしまった……takker.icon
これは逆も成り立つ
$ \forall p\in\N\forall a\in\R_p\exist m\in\Z\exist a_k:\Z_{\le m}\to[0,p\lbrack\cap\N.a=\sum_{k\le m}a_kp^k
証明
まず次を示す
$ \forall p\in\N\forall a\in\R_p\forall n,i,j\in\N.\left(i<j\land ip^{-n}\le a\le jp^{-n}\implies\exist l\in\N\cap[i,j\lbrack.(lp^{-n}\le a\le (l+1)p^{-n})\right)
小数点$ n桁のp進有限小数で$ aを挟み込めたなら、$ aを小数点$ n-1桁まで正確に求める手続きが存在することを表している
証明方針
$ \forall k\in\Nを導入し$ j=i+kで置換しておく
あとは$ kについて数学的帰納法を適用すればいい
証明
$ P(k):\iff(ip^{-n}\le a\le (i+k)p^{-n}\implies\exist l\in\N\cap[i,i+k\lbrack.(lp^{-n}\le a\le (l+1)p^{-n}))とする
$ \forall p\in\N\forall a\in\R_p\forall n,i\in\N.にて
$ ip^{-n}\le a\le (i+1)p^{-n}
$ \iff\exist l\in\N.\begin{dcases}lp^{-n}\le a\le (l+1)p^{-n}\\i\le l<i+1\end{dcases}
$ \iff\exist l\in\N\cap[i,i+1\lbrack.(lp^{-n}\le a\le (l+1)p^{-n})
$ \therefore\forall p\in\N\forall a\in\R_p\forall i\in\N.P(1)ー①
$ \forall p\in\N\forall a\in\R_p\forall n,i,k\in\N.にて
$ P(k)
$ \implies (
$ ip^{-n}\le a\le (i+k+1)p^{-n}
$ \iff ip^{-n}\le a\le (i+k)p^{-n}\lor(i+k)p^{-n}\le a\le (i+k+1)p^{-n}
$ \implies\exist l\in\N\cap[i,i+k\lbrack.(lp^{-n}\le a\le (l+1)p^{-n})\lor(i+k)p^{-n}\le a\le (i+k+1)p^{-n}
$ \iff\exist l\in\N.
$ \begin{dcases}i\le l<i+k\land lp^{-n}\le a\le (l+1)p^{-n})\\l=i+k\land lp^{-n}\le a\le (l+1)p^{-n})\end{dcases}
$ \iff\exist l\in\N\cap[i,i+k+1\lbrack.(lp^{-n}\le a\le (l+1)p^{-n})
$ \iff P(k+1)
$ \therefore\forall p\in\N\forall a\in\R_p\forall n,i,k\in\N.(P(k)\implies P(k+1))ー②
$ ①\land②\implies\forall p\in\N\forall a\in\R_p\forall n,i,k\in\N.P(k)
$ \underline{\therefore\forall p\in\N\forall a\in\R_p\forall n,i,j\in\N.\left(i<j\land ip^{-n}\le a\le jp^{-n}\implies\exist l\in\N\cap[i,j\lbrack.(lp^{-n}\le a\le (l+1)p^{-n})\right)\quad}_\blacksquareー③
$ ③\implies\forall p\in\N\forall a\in\R_p\forall i,j\in\N.\left(i<j\land i\le a\le j\implies\exist l\in\N\cap[i,j\lbrack.(l\le a\le (l+1))\right)
$ \implies\forall p\in\N\forall a\in\R_p\exist N,l\in\N.0\le l<N\land l\le a\le l+1
ここ$ \exist N\in\N.0\le a\le Nとしているがいろいろおかしいtakker.icon
$ a\ge0を証明していない
最初から整数の範囲で議論すべきだったか?
(55-6) l0 = m
å
k=0 ak pk
とします。以下、自然数 n に対し、
(55-7) ln p-n £ a £ (ln + 1)p-n
を満たす ln が求まったものと仮定します。これは
(55-8) (ln p)p-n-1 £ a £ {(ln + 1)p}p-n-1
と書けるので、(55-5) により
(55-9) ln p £ ln+1 < (ln + 1)p
を満たし、(55-7) の n を n + 1 に置き換えたものが成り立つような自然数 ln+1 が存在します。
そこで a-n-1 :º ln+1 - ln p と置けば、これは整数で、しかも 0 £ a-n-1 < p が成り立ち、しかも a - p-n £ ln p-n £ a ですから
(55-10) a =
lim
n ® ¥ ln p-n = l0 + ¥
å
n=0 ( ln+1 p-n-1 - ln p-n ) = l0 + ¥
å
n=0 a-n-1 p-n-1 = m
å
k=-¥ ak pk
と書け、a が (55-2) の表示を持つことがわかりました。
p進小数 a に対する (55-2) の形の表示を a のp進小数展開といい、特に断らない場合は p = 10 :º 9 + 1 の場合を単に小数展開とよびます。
また、0 から 9 までの数字をいくつか並べ、その次に小数点とよばれる記号“ . ”を置き、更にいくつかの数字を並べたとき、この記号列は、並んでいる数字を小数点から左に向かって順に ak ( k = 0, 1 ,¼ ) とし、小数点から右に向かって順に a-k ( k = 1, 2 ,¼ ) としたときの (55-2) の a を意味するものと約束します。
ただし、これでは有限小数しか表せないので、その数字列 rm ¼ r0 . r-1 ¼ r-n の最後に$ \cdotsという記号を書くことにより、便宜的に、すべての k ³ - n に対して ak = rk であるような任意の小数 (55-2) を表すことにします。
有理数$ \frac nmのp進小数展開
(55-11a) l0 = n/p
(55-11b) pln = mkn + ln+1 ( kn , ln+1ÎN ; 0 £ ln+1 < m )
によって { ln | nÎN } , { kn | nÎN } を定義すると
(55-12) n = l0 p = ¥
å
n=0 ( ln p-n+1 - ln+1 p-n ) = ¥
å
n=0 mkn p-n
(55-13) kn = pln - ln+1
————–
m £ pln
——
m < p ( n ³ 1 )
ゆえに k0 を p進展開して
(55-14) k0 = m
å
k=0 ak pk
とし、a-n :º kn ( n ³ 1 ) と置けば、n/m の p進展開:
(55-15) n/m = m
å
k=-¥ ak pk
が得られます。ところで (55-11b) により、kn と ln+1 は共に ln の関数です:
(55-16a) kn = j(ln )
(55-16b) ln+1 = y(ln )
しかも、y は m 個の元からなる有限集合 Nm への写像ですから、{ ln | 1 £ n £ m + 1 } = { y(ln ) | 0 £ n £ m } の中には必ず重複があります(このような論法を鳩ノ巣原理とよぶことがあります)。
例えば ln = ln' ( 1 £ n < n' £ m + 1 ) とすると、(55-16b) により、任意の kÎN に対して ln+k = ln'+k となり、従って (55-16a) により kn+k = kn'+k となります。言い換えると、{ ak | k £ m } は途中から繰り返しが生じています。このような p進小数を循環小数といい、
(55-17) am ¼ a0 . a-1 ¼ a-n+1 ·
a-n a-n-1 ¼ a-n'+2 ·
a-n'+1
と書きます。ただし、n' = n + 1 のときは、ドット付きの数字は一個だけになります。
さて、これとは逆に、任意の循環小数は有理数です。
実際、(55-17) のp進循環小数 a は、有理数:
(55-18a) b :º m
å
k=-n+1 ak pk
(55-18b) c :º n'-1
å
k=n a-k p-k
により
(55-19) a = b + c ¥
å
k=0 p-(n'-n) k = b + c
———–
1 - pn-n'
と書け、これは明らかに有理数です。以上で有理数と循環小数は同じものであることがわかりました。
次に、aÎRp \\ Qp の p進小数展開は一意的であることを証明しましょう。
実際、この場合、任意の整数 n に対し、(55-4) を満たす l が存在しますが、このとき a が Qp のすべての元と異なることから
(55-20) lp-n < a < (l + 1)p-n
が成り立つので、このような l は一意的に定まることがわかります。ゆえにこれを ln と書けば、(55-3b) の括弧の中により
(55-21) ln p-n = m
å
k=-n ak pk
が成り立つので、これを逆に解けば、
(55-22) a-n = pn ( ln p-n - ln-1 p-n+1 ) = ln - pln-1
と一意的に解けますから、これで p進表示の一意性は証明されました。
さて、前節で超越数であることがわかった e や p は p進小数展開できることがわかりましたから、これらを実際に十進小数展開してみましょう。
まず e ですが、(46-31a) により
(55-23) 0 < e - n
å
k=0 1
—–
k! = ¥
å
k=n+1 1
—–
k! < 1
—–
n! ¥
å
k=1 1
———–
(n + 1)k = 1
——
n! n
という評価が得られますが、この式で n = 13 とすれば、
(55-24) e
= 13
å
k=0 1
—–
k! + d æ
è 0 < d < 1
———
13! · 13 = 1
——————
80951270400 £ 13 · 10-12 ö
ø
= 1 + 1 + 1
—–
2 + 1
—–
6 + 1
—–
24 + 1
—–
120 + 1
—–
720 + 1
——–
5040 + 1
———
40320 + 1
———
362880 + 1
———–
3628800 + 1
————
39916800 + 1
————–
479001600 + 1
—————
6227020800 + d
= 1 + 1 + 0.5 + 0.166666666666 + 0.041666666666 + 0.008333333333 + 0.001388888888 + 0.000198412698 + 0.000024801587
+ 0.000002755731 + 0.000000275573 + 0.000000025052 + 0.000000002087 + 0.000000000160 + d + e ( 0 £ e £ 11 · 10-12 )
= 2.718281828441 + d + e ( 0 £ d + e £ 24 · 10-24 )
= 2.7182818284¼
という e の小数展開が得られます。
ただし e は、11個の有理数を小数展開したときに、小数点以下12桁まででカットしたことによる誤差の合計で、その評価は、それぞれの誤差が最大 10-12 であることによるものです。
次は p です。
既に (47-25) や (48-44) で p の級数及び無限積による表示が得られていますが、これらの収束は遅いので、実際の計算には適しません。
そこで以下のような工夫をします。(47-22a) の右辺は、x > 0 のとき、n が偶数であるか奇数であるかにより、それぞれ正又は負になりますから、
(55-25) 2n-1
å
k=0 (- 1)k x2k+1
—————
2k + 1 < arctan x < 2n
å
k=0 (- 1)k x2k+1
—————
2k + 1
という不等式の評価が成り立ちます。
一方、任意の実数 x , y に対して a :º arctan x , b :º arctan y と置くと、tan a = x , tan b = y となりますから、(47-6c) により
(55-26) tan(a + b) = tan a + tan b
——————
1 - tan a tan b = x + y
———
1 - xy
となるので
(55-27) arctan x + y
———
1 - xy = arctan x + arctan y
という公式が得られます。ここで左辺の arctan の中が 1 になるように、x + y = 1 - xy を y について解けば、y = (1 - x)/(1 + x) となるので、
(55-28) p
—–
4 = arctan 1 = arctan x + arctan 1 - x
——–
1 + x
ゆえに例えば x = 1/2 と置けば、(1 - x)/(1 + x) = 1/3 となるので
(55-29) p
—–
4 = arctan 1
—–
2 + arctan 1
—–
3
が得られます。この右辺を (55-25) によって評価すれば、(47-25) よりはるかに早い収束で数値計算ができますが、更に効率の良い式を探してみましょう。(55-27) で y = x と置いて両辺を入れ替えると
(55-30) 2 arctan x = arctan 2x
——–
1 - x²
ここで x = 1/5 と置けば、
(55-31) 2 arctan 1
—–
5 = arctan 2/5
——–
24/25 = arctan 5
—–
12
更に (55-30) に x = 5/12 を代入すれば、
(55-32) 2 arctan 5
—–
12 = arctan 5/6
——————
(144 - 25)/144 = arctan 120
——
119
そこで (55-28) で x = 120/119 と置けば、(1 - x)/(1 + x) = - 1/239 となるので
(55-33) p
—–
4 = arctan 120
——
119 - arctan 1
——
239 = 4 arctan 1
—–
5 - arctan 1
——
239
が得られます。これはMachinの公式とよばれ、この右辺を (55-25) によって評価した式は収束が早いので、昔から計算機による p の計算によく用いられています。
そこで、このMachinの公式を使って p を実際に小数展開してみましょう。
まず (55-25) によって arctan(1/5) を計算すれば、
(55-34a) 16 arctan 1
—–
5
= 7
å
k=0 (- 1)k · 16
——————
(2k + 1) · 52k+1 + d æ
è 0 < d < 16
———
17 · 517 = 16
———————
12969970703125 £ 2 · 10-12 ö
ø
= 16
—–
5 - 16
——
375 + 16
——–
15625 - 16
———
546875 + 16
————
17578125 - 16
————–
537109375 + 16
—————–
15869140625 - 16
——————
457763671875 + d
= 3.2 - 0.042666666666 + 0.001024 - 0.000029257142 + 0.000000910222 - 0.000000029789
+ 0.000000001008 - 0.000000000034 + d + e ( - 4 · 10-12 £ e £ 2 · 10-12 )
= 3.158328957599 + d + e ( - 4 · 1012 £ d + e £ 4 · 10-12 )
次に (55-25) によって arctan(1/239) を計算すれば、
(55-34b) 4 arctan 1
——
239
= 1
å
k=0 (- 1)k · 4
———————
(2k + 1) · 2392k+1 + d' æ
è 0 < d' < 4
———–
5 · 2395 = 4
——————–
3899056325995 £ 2 · 10-12 ö
ø
= 4
——
239 - 4
————
40955757 + d'
= 0.016736401673 - 0.000000097666 + d' + e' ( - 10-12 £ e' £ 10-12 )
= 0.016736304007 + d' + e' ( - 1012 £ d' + e' £ 3 · 10-12 )
従って、- 7 · 1012 £ d + e - d' - e' £ 5 · 10-12 に注意すれば、Machinの公式 (55-33) により
(55-35) p = 16 arctan 1
—–
5 - 4 arctan 1
——
239 = 3.141592653592 + d + e - d' - e' = 3.1415926535¼
という p の小数展開が得られます。
次に、一般の無理数 a に対し、a の連分数展開について考察します。
一般に、無理数 b に対し、すべての自然数 n に対して b ¹ n + 1/2 ですから、b との差の絶対値が最小値を取る自然数が唯一つ存在します。これを b と書くことにし、実数列 an を
(55-36a) a0 = a
(55-36b) an+1 = 1
———
an - an
で定義します。帰納法により、an は無理数であることがわかるので、(55-36b) の右辺の分母は 0 になりません。また、明らかに | an - an | < 1/2 ですから | an+1 | > 2 、従って | an+1 | ³ 2 が成り立ちます。
逆に、整数 n0 と、絶対値が 2 以上の整数からなる列 { nk | k ³ 1 } が与えられたとき、各自然数 n ごとに、整数の有限列 { x(n)k | 0 £ k £ n } を“逆から”次のように定義します:
(55-37a) x(n)n = nn
(55-37b) x(n)k = nk + 1
——–
x(n)k+1
このとき、1 £ k £ n に対して
(55-38) | x(n)k | ³ n - k + 2
————
n - k + 1
が成り立ちます。実際、k = n のときは (55-37a) と | nn | ³ 2 により明らかで、k を k + 1 に置き換えたものが成り立つと仮定すると、
(55-39) | x(n)k | ³ | nk | - 1
———–
| x(n)k+1 | ³ 2 - n - k
————
n - k + 1 = n - k + 2
————
n - k + 1
となって、降順の帰納法により証明されました。特に (55-37b) の右辺に出てくる分数の分母は 0 にならないことがわかります。
ゆえに、1 £ k £ n < m なら、(55-37b) と (55-38) により
(55-40) | x(m)k - x(n)k | = |
|
|
| 1
——–
x(n)k+1 - 1
——–
x(m)k+1 |
|
|
| = | x(m)k+1 - x(n)k+1 |
———————
| x(n)k+1 | | x(m)k+1 | £ n - k
————
n - k + 1 m - k
————
m - k + 1 | x(m)k+1 - x(n)k+1 |
ゆえに、
(55-41) | x(m)k - x(n)k | £ 1
————
n - k + 1 m - n + 1
————
m - k + 1 | x(m)n - x(n)n | = 1
————
n - k + 1 m - n + 1
————
m - k + 1 1
———–
| x(m)n+1 | £ 1
————
n - k + 1 m - n
————
m - k + 1 £ 1
————
n - k + 1
これは、各 k に対して { x(n)k | n ³ k } がコーシー列になっていることを意味するので、ある xk に収束し、(55-37b),(55-38) で n ® ¥ とすれば
(55-42) xk = nk + 1
——
xk+1
(55-43) | xk | ³ 1 ( k ³ 1 )
が成り立つことがわかります。そこで、このときの x0 のことを
(55-44) x0 = n0 + 1
—
n1 + 1
—
n2 + 1
—
n3 + ¼
と書いて、これを(分子が 1 の)連分数といいます。
さて、任意の無理数 a から (55-36) によって an を作り、nn :º an と置いて、(55-44) の連分数を作ると、これが a に一致することが証明できます。
実際、(55-36b) と (55-42) から
(55-45) xk - ak = nk + 1
——
xk+1 - ak - 1
——
ak+1 = 1
——
xk+1 - 1
——
ak+1
ですから
(55-46) | xk - ak | £ 1 + 1
—–
2 = 3
—–
2
および
(55-47) | xk - ak | £ | xk+1 - ak+1 |
——————
| xk+1 | | ak+1 | £ | xk+1 - ak+1 |
——————
2
がすべての k ³ 1 について成り立ち、これは xk = ak ( k ³ 1 ) であること、従って a = a0 = a0 + 1/a1 = n0 + 1/x1 = x0 であることを意味します。
以上の議論を a = p の場合に適用してみましょう。(55-35) により
(55-48a) a0 = p = 3.141592653591 ± 6 · 10-12
(55-48b) a0 = 3
(55-49a) a1 = 1
———
a0 - 3 = 1
———————————
0.141592653591 ± 6 · 10-12 = 7.062513306 ± 10-9
(55-49b) a1 = 7
(55-50a) a2 = 1
———
a1 - 7 = 1
————————
0.062513306 ± 10-9 = 15.9965944 ± 3 · 10-7
(55-50b) a2 = 16
(55-51a) a3 = 1
———
a2 - 16 = - 1
————————–
0.0034056 ± 3 · 10-7 = - 293.6¼
(55-51b) a3 = - 294
ただし、上記の a ± b は、a - b と a + b の間にある数を表す便宜的な表記です。従って
(55-52) p = 3 + 1
—
7 + 1
—
16 - 1
—–
294 + ¼
という p の連分数展開を得ます。
もしこれを有限項で切れば、p を近似する分数として
(55-53a) p' :º 3 + 1
—–
7 = 22
—–
7 = 3.142857¼
(55-53b) p" :º 3 + 1
—
7 + 1
—
16 = 3 + 1
———–
7 + 1/16 = 3 + 16
——
113 = 355
——
113 = 3.14159292¼
が得られ、特に p" の方は、小数点以下 6 桁まで一致する、ずば抜けてよい p の近似値を与えることがわかります。
さて、次に p を数値計算するための、全く別の方法を考えてみましょう。
| a | < b であるような実数 a , b の組に対して
(55-54a) x0 :º a
(55-54b) y0 :º b
(55-55a) xn+1 :º xn + yn
———
2
(55-55b) yn+1 :º ________
Ö xn+1 yn
によって数列 { xn | nÎN } , { yn | nÎN } を定義します。このとき両数列は同一の極限値に収束することを証明しましょう。
実際、まず
(55-56a) c :º _______
Öb² - a²
(55-56b) q :º arccos a
—–
b
(55-57a) cn :º c
—–
2n
(55-57b) qn :º q
—–
2n
と置くと、0 < q < p ですが、
(55-58a) xn :º cn cot qn
(55-58b) yn :º cn csc qn
が成り立つことを n に関する帰納法で証明します。
まず、(55-56b) により a/b = cos q で、しかも b > 0 , sin q > 0 ですから、(55-56a) により c = b __________
Ö1 - cos²q = b sin q となります。
ゆえに b = c csc q 及び a = b cos q = c csc q cos q = c cot q が得られ、これで n が 0 のときは証明されました。
次に n について成り立つと仮定し、f :º qn+1 , k :º cn+1 と置くと、qn = 2f , cn = 2k となり、帰納法の仮定により
(55-59a) xn+1 = xn + yn
———
2 = k {cot(2f) + csc(2f)} = k{cos(2f) + 1}/sin(2f) = k{2 cos² f}/{2 sin f cos f} = k cot f
(55-59b) yn+1 = ________
Ö xn+1 yn = ____________________
Ök cot f ·2k csc(2f) = k _________________________________
Ö(cos f / sin f) 2 /(2 sin f cos f) = k / _____
Ösin²f = k csc f
となって、帰納法が完成しました。
さて、(55-57),(55-58) により
(55-60a) xn = cn
—–
qn qn cot qn = c
—–
q qn
——–
tan qn
(55-60b) yn = cn
—–
qn qn csc qn = c
—–
q qn
——–
sin qn
と表すことができます。一方、t < 0 < p/2 に対して
(55-61) sin t < t < tan t
が成り立ちます。実際、j(t) :º t - sin t , y(t) :º tan t - t と置くと、j'(t) = 1 - cos t > 0 , y'(t) = sec² t - 1 = tan² t > 0 ですからいずれも単調増加で、しかも j(0) = y(0) = 0 なので j(t), y(t) > 0 となるからです。
また、
(55-62a)
lim
t ¯ 0 sin t
——
t = sin' 0 = cos 0 = 1
(55-62b)
lim
t ¯ 0 tan t
——
t = tan' 0 = sec² 0 = 1
ですから、n ® ¥ のとき qn ® 0 であることに注意すれば、(55-60),(55-61),(55-62) により
(55-63) xn < c
—–
q < yn
及び
(55-64)
lim
n ® ¥ xn =
lim
n ® ¥ yn = c
—–
q
が成り立つことがわかります。
従って、例えば初期値として a = 0 , b = 1/2 を与えると、c = 1/2 , q = arccos 0 = p/2 となるので、
(55-65)
lim
n ® ¥ xn =
lim
n ® ¥ yn = 1
—–
p
が得られ、このことを利用すると、この数列を使って p の値を計算することができます。
さて、この初期値のもとで数値計算するときの工夫の一つとして、加速法という方法があるのでそれを解説しましょう。
(55-66) sn :º 1
——
yn-1 = 2n sin p
—–
2n = 2n ¥
å
k=0 (- 1)k p2k+1
——————
(2k + 1)!22nk+n = p + ¥
å
k=1 (- 1)k p2k+1
—————
(2k + 1)!4nk
と表すと、右辺第2項が sn と p の誤差になります。そこで、順次
(55-67) s(1)n :º 4sn+1 - sn
————–
4 - 1 = 1
——–
4 - 1 æ
è 4p + ¥
å
k=1 (- 1)k p2k+1
——————–
(2k + 1)!4nk+k-1 - p - ¥
å
k=1 (- 1)k p2k+1
—————
(2k + 1)!4nk ö
ø = p + ¥
å
k=2 (- 1)k p2k+1
—————
(2k + 1)!4nk 41-k - 1
———–
4 - 1
(55-68) s(2)n :º 4²s(1)n+1 - s(1)n
——————
4² - 1 = 1
———
4² - 1 æ
è 4²p + ¥
å
k=2 (- 1)k p2k+1
——————–
(2k + 1)!4nk+k-2 - p - ¥
å
k=2 (- 1)k p2k+1
—————
(2k + 1)!4nk ö
ø 41-k - 1
———–
4 - 1 = p + ¥
å
k=3 (- 1)k p2k+1
—————
(2k + 1)!4nk 42-k - 1
———–
4² - 1 41-k - 1
———–
4 - 1
と定義していくと、誤差項の和の初項の冪が上がっていき、収束が早くなります。これを加速法といいます。
INDEX   BACK   NEXT
#2024-07-12 12:07:21